package com.dkts.oil.util;


import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 反射工具类，用于获取类实现接口的泛型参数类型
 */
public class ReflectionUtils {

    /**
     * 获取指定类实现的第一个泛型接口的第一个泛型参数类型的Class
     *
     * @param clazz 目标类
     * @return 泛型参数的Class，如果无法获取则返回 Object.class
     */
    public static Class<?> getFirstGenericInterfaceParameterClass(Class<?> clazz) {
        Type[] genericInterfaces = clazz.getGenericInterfaces();
        if (genericInterfaces.length == 0) {
            return Object.class;
        }
        Type genericInterface = genericInterfaces[0];
        if (genericInterface instanceof ParameterizedType) {
            Type[] actualTypeArguments = ((ParameterizedType) genericInterface).getActualTypeArguments();
            if (actualTypeArguments.length > 0) {
                Type type = actualTypeArguments[0];
                if (type instanceof Class<?>) {
                    return (Class<?>) type;
                }
                // 处理泛型擦除等情况也可以在这里扩展
            }
        }
        return Object.class;
    }
}
